#ifndef ALGO_EVA_H
#define ALGO_EVA_H

#include "algohub_export.h"
#include "algohub_common_type.h"

namespace algo
{
	class AlgoEvaluatorDB;
	class AlgoEvaluatorPrivate;

	class ALGOHUB_EXPORT AlgoEvaluator final
	{
	public:
		AlgoEvaluator();
		~AlgoEvaluator();

		void setTaskConfig(const algobase::TaskConfig& config);
		algobase::TaskConfig& getTaskConfig() const;

		void setEvaluateL1IndexMap(const algobase::EvaluateL1IndexMap& index);
		algobase::EvaluateL1IndexMap& getEvaluateL1IndexMap() const;

		void setEvaluateDB(const std::shared_ptr<AlgoEvaluatorDB>& db);
		std::shared_ptr<AlgoEvaluatorDB> getEvaluateDB() const;

		int exec(
			const algobase::Path& path, 
			double& result,
			algobase::EvaluatorCoords& resultCoords
		);

		std::string getLastErrorMessage() const;

	private:
		AlgoEvaluatorPrivate* d;
	};
}

#endif // !ALGO_EVA_H
